#include "LinkedQueueStack.h"
#include <stdlib.h>
#define MAX 1000


LStack stack;
//初始化链栈S
Status InitStack_LS() {
    // 初始化有100个客户结点的链栈S
    CustNode *p,*q;
    p=(CustNode*)malloc(sizeof(CustNode));
    p->next=NULL;
    for (int i = 0; i < MAX-1; ++i) {
        q=(CustNode*)malloc(sizeof(CustNode));
        q->next=p;
        p=q;
    }
    stack=p;
    return OK;
}

//将结点p压人栈S
Status Push_LS(LStack &S,CustNode *p) {
//    CustNode *t;
//    t=(CustNode*)malloc(sizeof(CustNode));//为元素e分配结点空间
//    if(NULL==t)return OVERFLOW;//分配失败返回
    //t->data=e;
    p->next=S;
    S=p; //在栈顶位置插人新结点
    return OK;
}
// 栈S的栈顶结点出栈,并用t返回
CustNode* Pop_LS(LStack&S) {
    CustNode *t;
    if(NULL==S)return NULL;//判断是否为空栈
    t=S;//t指向栈顶元素结点
    //e=S->data;//用e返回栈顶元素值
    S=S->next;//删除栈顶元素结点
    //free(t);//释放结点
    return t;
}

void DestroyStack_LS()
{
    CustNode *p = stack->next, *q = stack;
    while (p != NULL)
    {
        free(q);
        q = p;
        p = p->next;
    }

    free(q);//此时q指向尾结点

}

CustNode* myMalloc() {
    return Pop_LS(stack);
}

// 动态分配内存的函数，模拟栈的入栈操作
void myFree(CustNode *node) {
    //if (node!=NULL){
        node->next=NULL;
//    node->durtime=0;
//    node->arrtime=0;
//    node->amount=0;
        Push_LS(stack,node);
    //}

}